package it.javaweb.dao.jdbc;

import it.javaweb.beans.Profilo;
import it.javaweb.beans.TitoloDiStudio;
import it.javaweb.beans.Utente;
import it.javaweb.dao.UtenteDAO;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;

public class UtenteDAOImpl implements UtenteDAO {

	private SimpleJdbcTemplate simpleJdbcTemplate;

	@Autowired
	public void init(DataSource dataSource) {
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}


	@Override
	public List<Utente> getAll() {
		List<Utente> utenti = this.simpleJdbcTemplate.query(
				"SELECT * FROM utente",
				new UtenteRowMapper());
		return utenti;
	}

	public Utente accessControl(String login, String password){
		Utente utente = null;
		try {
			utente = (Utente) this.simpleJdbcTemplate.queryForObject(
					"SELECT * FROM utente where login = ? and password = ?", 
					new UtenteRowMapper(),
					login, password);
		} catch (EmptyResultDataAccessException e) {
			// questa eccezione non e' gestita in quanto identifica un login errato, 
			// cioe' non e' stato trovato un utente con queste credenziali.
			// In questo caso si torna null come previsto dall'interfaccia UtenteDao.

			// NOTA SP: e' essenziale mettere un commento in questo punto, altrimenti ad un'analisi
			// futura non siamo in grado di capire se non va gestita, o Studioe' stata una dimenticanza
		}
		return utente;
	}

	public boolean addUser(Utente utente){
		boolean verifica = false;
		int control = this.simpleJdbcTemplate.update(
				"INSERT INTO utente (nome, cognome, codice_fiscale, partita_iva, login, password, id_profilo, id_titolo_studio, attivo) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", 
				utente.getNome(), utente.getCognome(), utente.getCodiceFiscale(), utente.getPartita_iva(), utente.getLogin(), utente.getPassword(), utente.getId_profilo(),
				utente.getId_titolo_studio(), utente.isAttivo());
		if (control == 1) verifica = true;		
		return verifica;
	}


	public List<Profilo> getProfili(){
		List<Profilo>  profili=  this.simpleJdbcTemplate.query("SELECT * FROM profilo", new ProfiloRowMapper());		
		return profili;
	}

	public List<TitoloDiStudio> getTitoli(){
		List<TitoloDiStudio> titoli = this.simpleJdbcTemplate.query("SELECT * FROM titolo_di_studio", new TitoloRowMapper());
		return titoli;
	}


	@Override
	public Utente getByLogin(String login) {
		Utente u = null;
		try {
			u = simpleJdbcTemplate.queryForObject(
				"SELECT * FROM utente WHERE login=?", 
				new UtenteRowMapper(), login);
		} catch (EmptyResultDataAccessException e) {
			// questa eccezione non e' gestita in quanto identifica un login errato, 
			// cioe' non e' stato trovato un utente con queste credenziali.
			// In questo caso si torna null come previsto dall'interfaccia UtenteDao.
		}
		return u;
	}
}
